package someTestExcemple.reflect;

import java.io.FileOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class MyEasyFrame {
    //需求：对于任意一个对象，设计一个简易框架,可以把对象的字段名和对于的值保存到文件中去
    /**
     * 实现步骤
     * ①定义一个方法，可以接收任意对象。
     * ②每收到一个对象后，使用反射获取该对象的Class对象，然后获取全部的成员变量。
     * ③遍历成员变量，然后提取成员变量在该对象中的具体值。
     * ④把成员变量名、和其值，写出到文件中去即可。
     */
    public static boolean saveObjectFiledToFile(Object obj) throws Exception{
        try {
            LocalDateTime now = LocalDateTime.now();
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy_MM_dd_HH_mm_ss");
            String fileName = "src/main/java/someTestExcemple/reflect/"+ obj.getClass().getSimpleName() +"_" + now.format(dateTimeFormatter)+".txt";
            PrintStream out =  new PrintStream(new FileOutputStream(fileName,true));
            Class c = obj.getClass();
            out.println("---"+ obj.getClass().getSimpleName()+"---");
            Field[] fields = c.getDeclaredFields();
            for (Field field : fields) {
                field.setAccessible(true);
                String filedName = field.getName();
                Object filedValue = field.get(obj);
                System.out.println(filedName+"==>"+filedValue);
                out.println(filedName+" ==> "+filedValue);
            }
            out.println("-------------------------------");
            out.close();
        } catch (Exception e) {
            System.out.println("保存对象失败");
           throw e;
        }
        return true;
    }
}
